/*
 * 一阶低通滤波器
 * 
*/

#ifndef __LPF1_H__
#define __LPF1_H__

#include <stdbool.h>

// 错误代码定义
typedef enum
{
    LPF_OK = 0,
    LPF_ERROR_NULL_POINTER,
    LPF_ERROR_INVALID_ALPHA
}LPF1_Status;

typedef struct
{
    float alpha;       // 平滑系数
    float last_output; // 上一次的输出值
    bool init_flag;    // 是否已初始化
}WHT_LPF1_t;


typedef struct
{
    /* 初始化一阶低通滤波器 */
    LPF1_Status (*init)(WHT_LPF1_t *filter, float alpha);
    /* 基于时间常数初始化滤波器 */
    LPF1_Status (*init_time_constant)(WHT_LPF1_t *filter, float time_constant, float sample_rate);
    /* 重置滤波器状态 */
    void (*reset)(WHT_LPF1_t *filter);
    /* 设置新的平滑系数 */
    LPF1_Status (*set_alpha)(WHT_LPF1_t *filter, float alpha);
    /* 获取当前输出值（不更新状态） */
    float (*get_current_output)(const WHT_LPF1_t *filter);
    /* 应用滤波器处理新数据点 */
    float (*apply_one)(WHT_LPF1_t *filter, float value);
    /* 批量处理数据 */
    void (*apply_multiple)(WHT_LPF1_t *filter, float *input, float *output, size_t size);
}WHT_LPF1_OPS_t;

extern const WHT_LPF1_OPS_t WHT_LPF1_OPS;

#endif /* __LPF1_H__ */
